/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ui;

import java.util.List;
import java.util.Vector;
import modbus.Driver;
import modbus.DriverSerie;
import modbus.DriverTCP;
import modbus.FabricaPaquetes;
import modbus.ExpertoComunicacion;
import modbus.ObservadorMensajes;
import modbus.Paquete;
import modbus.SuscriptorMensajes;

/**
 *
 * @author Leandro
 */
public class Controlador {

    private List<String> puertosActivos;
    private Driver driver;
    private ExpertoComunicacion sender;
    private static char sistemaNum = 'H';
    private boolean andando = false;

    public boolean isAndando() {
        return andando;
    }

    public void setAndando(boolean andando) {
        this.andando = andando;
    }

    public ExpertoComunicacion getSender() {
        return sender;
    }

    public void setSender(ExpertoComunicacion sender) {
        this.sender = sender;
    }

    public static char getSistemaNum() {
        return sistemaNum;
    }

    public static void setSistemaNum(char sistemaNum) {
        Controlador.sistemaNum = sistemaNum;
    }

    public boolean conect(String puerto, int velocidad, int dataBits, int stopBits, String paridad, int to, int reint) {
        driver = new DriverSerie();
        DriverSerie d=(DriverSerie) driver;
        boolean conexion = d.connectSerial(puerto, velocidad, dataBits, stopBits, paridad, to, reint);
        System.out.println("conexion =" + conexion);
        SuscriptorMensajes.getI().notificar("Resultado de la conexón=" + conexion);

        return conexion;
    }

    public boolean conect(String puerto, int velocidad, int dataBits, int stopBits, String paridad) {

        driver = new DriverSerie();
        DriverSerie d=(DriverSerie) driver;
        boolean conexion = d.connectSerial(puerto, velocidad, dataBits, stopBits, paridad);
        System.out.println("conexion =" + conexion);
        SuscriptorMensajes.getI().notificar("Resultado de la conexón=" + conexion);

        return conexion;
    }

    public Vector<String> getPorts() {
        return DriverSerie.getPortNames();
    }

    public boolean disconect() {
        boolean rta=driver.disconnect();
        driver=null;
        return rta;

    }

    public void start(int id, int funcion, int dirInicio, int cantReg, int valorEscribir, int[] valores) {

        sender = new ExpertoComunicacion(driver);
//        Paquete p=(FabricaPaquetes.getInst().getPaqueteSerial(id, funcion, dirInicio, cantReg,valorEscribir,valores));
        List<Paquete> p = null;
        if(driver instanceof DriverSerie){
            p = FabricaPaquetes.getInst().getPaquetesSerial(id, funcion, dirInicio, cantReg, valorEscribir, valores);
        }else if (driver instanceof DriverTCP){
            p = FabricaPaquetes.getInst().getPaquetesTcp(id, funcion, dirInicio, cantReg, valorEscribir, valores);
        }
        sender.setPs(p);
        sender.setEnviar(true);
        sender.setIntervalo(1000);
        sender.start();





    }

    public void stop() {
        if (sender != null) {
            sender.stop();
        }

        sender = null;

    }

    public List<String> getPuertosActivos() {
        return puertosActivos;
    }

    public void setPuertosActivos(List<String> puertosActivos) {
        this.puertosActivos = puertosActivos;
    }

    public Driver getDriver() {
        return driver;
    }

    public void setDriver(Driver driver) {
        this.driver = driver;
    }

    public boolean conect(String ip,int puerto,int timeO,int reint) {
        driver = new DriverTCP();
        DriverTCP d=(DriverTCP) driver;
        boolean conexion = d.concectTcp(ip, puerto, timeO, reint);
        System.out.println("conexion =" + conexion);
        SuscriptorMensajes.getI().notificar("Resultado de la conexón=" + conexion);

        return conexion;
    }
}
